home *** CD-ROM | disk | FTP | other *** search
- /*
- ** If this is a standalone build, the starting EIP must point to _emu387
- ** and go32 will install the interrupt vector itself.
- */
- .data
-
- .comm _eax,4
- .comm _ebx,4
- .comm _ecx,4
- .comm _edx,4
- .comm _esi,4
- .comm _edi,4
- .comm _ebp,4
- .comm _esp,4
- .comm _eip,4
-
- .text
-
- .globl _emu387
- _emu387:
- movl %eax,_eax
- movl %ebx,_ebx
- movl %ecx,_ecx
- movl %edx,_edx
- movl %esi,_esi
- movl %edi,_edi
- movl %ebp,_ebp
-
- movl %esp,_esp
- add $12,_esp
- pushl %ebp
- movl %esp,%ebp
-
- movl 4(%ebp),%eax
- movl %eax,_eip
- call _emu_entry__Fv
- movl _eip,%eax
- movl %eax,4(%ebp)
- movl _eax,%eax
- movl _ebx,%ebx
- movl _ecx,%ecx
- movl _edx,%edx
- movl _esi,%esi
- movl _edi,%edi
- popl %ebp
- iret
-
- .globl _emu_install__Fv
- _emu_install__Fv:
- movw $16,%ax
- movw %ax,%gs
- movl $_emu387,%ecx
- movl $56,%eax /* vector 7 * 8 bpv */
- movw %cx,%gs:(%eax)
- movw $64,%gs:2(%eax) /* selector 8 == 32-bit code */
- movw $0x8f00,%gs:4(%eax)
- rorl $16,%ecx
- movw %cx,%gs:6(%eax)
- movw %ds,%ax
- movw %ax,%gs
- ret
-